package org.example.projectdemo.repository;

import org.example.projectdemo.model.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * ClassName: StudentRepository
 * Package: org.example.projectdemo.repository
 * Description:
 *
 * @Author ZY
 * @Create 23:06
 * @Version 1.0
 */
@Repository
public interface StudentRepository extends JpaRepository<Student,Long> {
    /**
     * 根据学号查找学生
     *
     * @param studentNumber 学号
     * @return 包含学生的Optional对象，如果找不到则返回Optional.empty()
     */
    Optional<Student> findByStudentNumber(String studentNumber);

    /**
     * 根据班级名称查找该班级的所有学生
     *
     * @param className 班级名称
     * @return 该班级的学生列表
     */
    List<Student> findByClassName(String className);

    /**
     * 根据学生状态查找学生
     *
     * @param state 学生状态 (如：1-在校，0-离校)
     * @return 符合状态的学生列表
     */
    List<Student> findByState(Byte state);
    
    /**
     * 查找所有未删除的学生
     * 
     * @return 未删除的学生列表
     */
    List<Student> findByDeletedFalse();
    
    /**
     * 根据ID查找未删除的学生
     * 
     * @param id 学生ID
     * @return 包含学生的Optional对象，如果找不到则返回Optional.empty()
     */
    Optional<Student> findByIdAndDeletedFalse(Long id);
    
    /**
     * 根据学号查找未删除的学生
     * 
     * @param studentNumber 学号
     * @return 包含学生的Optional对象，如果找不到则返回Optional.empty()
     */
    Optional<Student> findByStudentNumberAndDeletedFalse(String studentNumber);
    
    /**
     * 根据班级名称查找该班级的所有未删除学生
     *
     * @param className 班级名称
     * @return 该班级的未删除学生列表
     */
    List<Student> findByClassNameAndDeletedFalse(String className);
    
    /**
     * 根据学生状态查找未删除的学生
     *
     * @param state 学生状态 (如：1-在校，0-离校)
     * @return 符合状态的未删除学生列表
     */
    List<Student> findByStateAndDeletedFalse(Byte state);
    
    /**
     * 检查指定ID的学生是否存在
     * 
     * @param id 学生ID
     * @return 存在返回true，否则返回false
     */
    boolean existsById(Long id);
}